<?php
/**
 * Created by PhpStorm.
 * Author: Shadow
 * Date: 2022/8/29
 * Time: 4:08 下午
 * description: AdminBusiness.php
 * 业务逻辑层、处理具体的业务逻辑
 */

namespace app\adminapi\business;


use app\common\model\Auth;
use app\common\model\Role;
use think\facade\Cache;

class AdminBusiness
{
    /**
     * 处理权限信息
     * @param $admin_id
     * @param $role_id
     * @return array * 父子级结构
     */
    public static function handleAuth($admin_id,$role_id){
        // 根据角色id、查询对应的角色信息
        $roleInfo = Role::find($role_id);
        // 根据权限id、查询对应的权限信息
        $authInfo = Auth::whereIn('id',$roleInfo->role_auth_ids)->select()->toArray();

        // 1. 处理权限信息、进行权限检测
        $adminAuth = [];
        foreach ($authInfo as $item) {
            if (!empty($item['auth_a']) && !empty($item['auth_c'])) {
                //处理控制器/方法
                $adminAuth[] = $item['auth_c'].'/'.$item['auth_a'];
            }
        }

        # 通过缓存、保存当前登录用户的权限
        Cache::set('auth'.$admin_id,$adminAuth,86400);

        // 2. 登录成功之后 返回对应的权限结构（父子级、树形结构）
        // 通过递归实现父子级结构
        $data = (new self())->parentStruct($authInfo);

        return  $data;

    }

    /**
     * 父子级结构
     */
    public function parentStruct($authInfo,$pid=0){
        $child = [];
        foreach ($authInfo as $key => $value) {
            if ($value['pid'] == $pid) {
                # 查找对应父级下面的子级
                $child[$key] = $value;
                $child[$key]['children'] = (new self())->parentStruct($authInfo,$value['id']);
            }
        }
        return $child;
    }

}